#!/usr/bin/env node

var client = require('share').client;
var text = process.argv[2];
var options = require('../dynamo/db/options');
var cr = require('../dynamo/db/create');
var time = 42000;
var thinktime = 12000;


var AWS = require('aws-sdk');

//carico i dati per amazon
AWS.config.update({accessKeyId: options.db.amazon_access_key, secretAccessKey: options.db.amazon_secret_key, region: options.db.amazon_region});

//dichiaro le variabili per amazon
var db = new AWS.DynamoDB();
var s3 = new AWS.S3();


s3.listObjects({
        Bucket: options.db.amazon_s3_snapshots_bucket_name
    }, function(err, data) {
        var randomnumber = Math.floor(Math.random()*(data.Contents.length));
        //var randomnumber = 0;
        //console.log('random = '+randomnumber);
        if (randomnumber == data.Contents.length){
            //devo fare la create
            console.log('voglio creare');
            var titolo = "t"+(data.Contents.length+1);

            db.describeTable({
                TableName: options.db.amazon_dynamo_operations_table_name+'_'+titolo
            }, function(err, data){
                if (data == null){
                    console.log('devo creare');
                    cr.create(db, options, titolo, function() {
                        //invoco la mia wait personale
                        console.log('sono nella callback');
                        setTimeout(function () {
                            db.describeTable({ 
                                TableName: options.db.amazon_dynamo_operations_table_name+'_'+titolo
                                }, function(err, data){
                                    //console.log(data);
                                    if (data.Table.TableStatus == "ACTIVE"){
                                        //console.log("return 0");
                                        goOpen();
                                    }
                                    else {
                                        console.log("Attualmente la tabella è "+data.Table.TableStatus);
                                        waitTableReady();
                                    }
                                }
                            );
                        }, time);
                    });
                }
                else{
                    if (data.Table.TableStatus == "ACTIVE"){
                        // options.db.amazon_dynamo_operations_table_name = data.Table.TableName;
                        // options.db.amazon_dynamo_snapshots_table_name = "snapshots_"+titolo;
                        console.log("READY WE GO!!!!");
                        goOpen();
                    }
                    //se la tabella è CREATING devo aspettare che diventa ACTIVE
                    else if (data.Table.TableStatus == "CREATING") {
                        console.log("Attualmente la tabella è "+data.Table.TableStatus);
                        // options.db.amazon_dynamo_operations_table_name = data.Table.TableName;
                        // options.db.amazon_dynamo_snapshots_table_name = "snapshots_"+titolo;
                        setTimeout(function(){waitTableReady()}, (time/2));
                    }
                    //se la tabella è DELETING devo aspettare che venga cancellata per poi crearla
                    else if (data.Table.TableStatus == "DELETING") {
                        console.log("Attualmente la tabella è "+data.Table.TableStatus+"; time uguale a "+(time-10000));
                        // options.db.amazon_dynamo_operations_table_name = data.Table.TableName;
                        // options.db.amazon_dynamo_snapshots_table_name = "snapshots_"+titolo;
                        setTimeout(function(){waitTableReady()}, (time-10000));
                    }
                }
            });
        }
        else {
            var file = data.Contents[randomnumber].Key;
            //console.log("file è uguale a "+ file);
            var titolo = file.substr(0, (file.indexOf('/')) );
            //console.log ("name è uguale a "+titolo);
            goOpen();
        }
    function waitTableReady(){
        db.describeTable({ 
            TableName: options.db.amazon_dynamo_operations_table_name+'_'+titolo
            }, function(err, data){
                if (data  == null){
                    console.log('NULL fratello!');
                    cr.create(db, options, titolo, function() {
                        //invoco la mia wait personale
                        console.log('sono nella callback del wait');
                        setTimeout(function () {
                            db.describeTable({ 
                                TableName: options.db.amazon_dynamo_operations_table_name+'_'+titolo
                                }, function(err, data){
                                    //console.log(data);
                                    if (data.Table.TableStatus == "ACTIVE"){
                                        console.log("return 0");
                                        goOpen();
                                    }
                                    else {
                                        console.log("Attualmente la tabella è "+data.Table.TableStatus+" nella wait");
                                        waitTableReady();
                                    }
                                    }
                            );
                        }, time);
                    });
                }
                else {
                    if (data.Table.TableStatus == "ACTIVE"){
                        console.log("READY WE GO!!!!");
                        goOpen();
                    }
                    else {
                        console.log("Attualmente la tabella è "+data.Table.TableStatus);
                        waitTableReady();
                    }
                }
            }
        );
    };
    
    function  goOpen(){
        client.open(titolo, 'text', 'http://multihands.chickenkiller.com:9000/channel', function(error, doc) {
            // Insert some text at the start of the document (position 0):
            //console.log(titolo);

            if (error != null){
                console.log("Errore nella open: "+error);
            }
            var i = 1;
            doc.insert(0, text+'\n');

            /*for (i = 1; i < 10; i++){
                setTimeout(function(){
                    doc.insert(0, text+'_'+i+'\n');
                    //console.log(doc.snapshot); 
                },(12000*i));
            }*/
            while ( i != -1){
                var scelta = Math.floor(Math.random()*4);
                //console.log('scelta= '+scelta);
                //console.log('i= '+i);
                if (scelta != 3){
                    if (i == 1){
                        setTimeout(function(){
                            doc.insert(0, text+'_1\n');
                        },thinktime);
                        i++;
                    }
                    else if (i == 2){
                        setTimeout(function(){
                            doc.insert(0, text+'_2\n');
                        },(thinktime*2));
                        i++;
                    }
                    else if (i == 3){
                        setTimeout(function(){
                            doc.insert(0, text+'_3\n');
                        },(thinktime*3));
                        i++;  
                    }
                    else if (i == 4){
                        setTimeout(function(){
                            doc.insert(0, text+'_4\n');
                        },(thinktime*4));
                        i++;
                    }
                    else if (i == 5){
                        setTimeout(function(){
                            doc.insert(0, text+'_5\n');
                        },(thinktime*5));
                        i++;
                    }
                    else if (i == 6){
                        setTimeout(function(){
                            doc.insert(0, text+'_6\n');
                        },(thinktime*6));
                        i++;
                    }
                    else if (i == 7){
                        setTimeout(function(){
                            doc.insert(0, text+'_7\n');
                        },(thinktime*7));
                        i++;
                    }
                    else if (i == 8){
                        setTimeout(function(){
                            doc.insert(0, text+'_8\n');
                        },(thinktime*8));
                        i++;
                    }
                    else if (i == 9){
                        setTimeout(function(){
                            doc.insert(0, text+'_9\n');
                        },(thinktime*9));
                        i++;
                    }
                    else if (i == 10){
                        setTimeout(function(){
                            doc.insert(0, text+'_10\n');
                        },(thinktime*10));
                        i++;
                    }
                    else if (i == 11){
                        setTimeout(function(){
                            doc.close();
                        },(thinktime*11));
                        i=-1;
                    }
                }
                else {
                    setTimeout(function(){
                        doc.close();
                    },(thinktime*i));
                    //console.log('tempo= '+(thinktime*i));
                    i=-1;
                };
            };
        });
    };
})
